from os import path
from flask import Blueprint,request,jsonify
import jwt
from werkzeug.utils import send_from_directory
from utils.db import db
from utils.comm import get_data
from utils.redisconn import r
from utils.comm import send_message
from utils.jwts import  myjwt
import json
import random
import re
import time


#创建路由
bp_adminlogin = Blueprint('adminlogin',__name__)


#用户登录
@bp_adminlogin.route('/login/',methods=["POST","GET"])
def login():
    if request.method=='POST':
        data= get_data()

        #获取验证码对比
        code = r.str_get(data['mobile'])
        #验证码失效
        if not code:
            return jsonify({'code':20020,'msg':'验证码已失效'})
        #对比验证码登录成功
        if code == data['code']:
            #查看数据库有没有记录
            sql = "select * from admin_user where name='%s'"%data['mobile']
            res = db.find_one(sql)
            #如果存在
            if res:
                #万一保存时间长清除  节约内存
                r.str_del(data['mobile'])
                starttime = time.time()
                #返回token 万一token过期 需要更新就需要一个只有时间的rtoken
                data = {'data':{'mobile':res['name'],'userid':res['id'],'iat':starttime,'exp':3600}}
                token = myjwt.jwt_encode(data)
                #用于更新的token 开始时间和token一样结束不一样
                rdata = {'data':{'iat':starttime,'exp':7200}}
                rtoken = myjwt.jwt_encode(rdata)
                #获取该用户的权限
                rsql = "select id,name,url from resources as r inner join roles_resource on r.id=resources_id where roles_id=%d"%(res['role_id'])
                reslist = db.find_all(rsql)
                return jsonify({"code":200,'msg':'登录成功','userid':res['id'],'mobile':res['name'],'token':token,'rtoken':rtoken,'reslist':reslist})
        else:
            return jsonify({'code':20021,'msg':'验证码有误'})

    else:
        #获取手机号
        mobile = request.args.get('mobile')
        #如果有值 清一分钟后再发
        value = r.str_get(mobile)
        if value:
            return jsonify({'code':10010,'msg':'请一分钟后重试'})
        #生成验证码 用random
        code = random.randint(100000,999999)
        #发送验证码到手机
        flag = send_message(mobile,code,1)
        if flag:
            #保存在redis 暂时
            r.str_set(mobile,code,30)

        return jsonify({"code":200,'code':code,'msg':'验证码获取成功'})

        




